package co.com.bean.nucleoeducativo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.NucleoEducativoDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.NucleoEducativoFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartNucleoEducativo;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class NucleoEducativoBean
 */
@Stateless(mappedName = "ejb/NucleoEducativoBean")
public class NucleoEducativoBean implements NucleoEducativoBeanLocal{
	private NucleoEducativoFacadeLocal facade;

	@Resource
	private SessionContext session;

	public NucleoEducativoBean() {
		facade = DelegateContextEJB.getNucleoEducativoFacadeLocal();
	}

	@Override
	public ResponseJson insertarNucleoEducativo(NucleoEducativoDTO nucleoEducativoDTO) {

		ResponseJson response = new ResponseJson(); 
		try {
			nucleoEducativoDTO.setCousuario(session.getCallerPrincipal().getName());				
			nucleoEducativoDTO.setFhingreso(new Date());facade.create(Mapper.mapperDtoToSmartNucleoEducativo(nucleoEducativoDTO));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo almacenado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo almacenado.");
		} catch (Throwable e) {
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el nucleo educativo.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public List<NucleoEducativoDTO> consultarAllNucleoEducativo(){
		List<NucleoEducativoDTO> nucleoEducativo = new ArrayList<NucleoEducativoDTO>();
		for (SmartNucleoEducativo entity : facade.findAll()) {
			if(entity.getSmfhretiro() == null){
				nucleoEducativo.add(Mapper.mapperSmartNucleoEducativoToDto(entity));
			}
		}

		return nucleoEducativo;
	}

	@Override
	public NucleoEducativoDTO consultarNucleoEducativoId(NucleoEducativoDTO nucleoEducativoDTO) {
		NucleoEducativoDTO nucleoEducativo = new NucleoEducativoDTO();
		SmartNucleoEducativo entity  = facade.find(nucleoEducativoDTO.getScnucleoeducativo());
		if(entity != null && entity.getSmfhretiro() == null){
			nucleoEducativo = Mapper.mapperSmartNucleoEducativoToDto(entity);
		}
		return nucleoEducativo;
	}

	@Override
	public ResponseJson editNucleoEducativo(NucleoEducativoDTO nucleoEducativo) {
		ResponseJson response = new ResponseJson(); 
		try {
			nucleoEducativo.setFhmodificacion(new Date());
			facade.edit(Mapper.mapperDtoToSmartNucleoEducativo(nucleoEducativo));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo editado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "nucleoEducativo editado.");
		} catch (Throwable e) {
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el nucleoEducativo.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public ResponseJson removeNucleoEducativo(NucleoEducativoDTO nucleoEducativo,  boolean logic) {
		ResponseJson response = new ResponseJson(); 
		if(logic){
			try {
				nucleoEducativo.setFhretiro(new Date());
				nucleoEducativo.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperDtoToSmartNucleoEducativo(nucleoEducativo));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo inactivado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo inactivado.");
			} catch (Throwable e) {
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el Nucleo educativo.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}else{
			try {
				facade.remove(Mapper.mapperDtoToSmartNucleoEducativo(nucleoEducativo));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo eliminado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Nucleo educativo eliminado.");
			} catch (Throwable e) {
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el Nucleo educativo.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}
		return response ;
	}
	
	@Override
	public List<NucleoEducativoDTO> filtrarnucleoseducativos(NucleoEducativoDTO nucleoeducativo) {
		List<NucleoEducativoDTO> findnucleoeducativo = new ArrayList<NucleoEducativoDTO>();
		for (SmartNucleoEducativo entity :facade.filtrarnucleoseducativos(Mapper.mapperDtoToSmartNucleoEducativo(nucleoeducativo))){
			if(entity.getSmfhretiro() == null){
				findnucleoeducativo.add(Mapper.mapperSmartNucleoEducativoToDto(entity));
			}
		}
		return findnucleoeducativo;
	}
}
